package com.cf.chat.client;
import com.cf.chat.util.CloseUtil;
import java.io.*;
import java.net.Socket;
/**
 * @Auther: cf
 * @Date: 2020/07/28/15:30
 * @Description:客户端向服务器端发送信息
 */
public class Send implements Runnable {
    // 创建BufferedReader对象
    private BufferedReader br;
    // 发送数据的数据流
    private DataOutputStream dos;
    // 布尔值默认为true，如果程序无异常则持续调用run方法
    private boolean flag = true;

    /**
     * 无参构造
     * 使用BufferedReader获取键盘输入
     */
    public Send() {
        br = new BufferedReader(new InputStreamReader(System.in));
        // br = scanner.next();
    }

    /**
     * 有参构造
     * 把从客户端拿到的输出流数据传给dos
     * @param client 定义客户端的输出流
     */
    public Send(Socket client) {
        // 使用this调用本类的无参构造方法
        this();
        try {
            dos = new DataOutputStream(client.getOutputStream());
        } catch (IOException e) {
            flag = false;
            CloseUtil.closeAll(dos, client);
        }
    }

    /**
     * 使用getMessage()方法读取键盘输入的数据并返回
     * @return 返回键盘输入值
     */
    private String getMessage() {
        String str = "";
        try {
            str = br.readLine();
        } catch (IOException e) {
            flag = false;
            CloseUtil.closeAll(br);
        }
        return str;
    }

    /**
     * 将获取到的键盘输入发送
     * @param str
     */
    private void send(String str) {
        try {
            // 将str的数据给输出流再发送
            dos.writeUTF(str);
            // 刷新输出流
            dos.flush();
        } catch (IOException e) {
            flag = false;
            CloseUtil.closeAll(dos);
        }
    }

    /**
     * 执行run方法实现数据流的发送
     */
    @Override
    public void run() {
        while (flag) {
            // 把getMassage获取到的数据传递给string
            String string = getMessage();
            // 调用send方法发送获取到的数据
            this.send(string);
            // 退出当前客户端
            if ("exit".equals(string)) {
                // 关闭流
                CloseUtil.closeAll(dos);
                System.out.println("当前设备已下线！");
                System.exit(0);
            }
        }
    }
}